Most data communication systems consist of a number of nodes, between which data is transmitted by use of several protocols. The protocols used within a node is often referred to as a protocol stack, the lower layer protocols in the protocol stack being closer to the physical interface used for the transmission of data to/from the node, while higher layer protocols are close to the application used by a user of the data communication system. The protocols used within different nodes need by no means be the same. Each protocol in a protocol stack has a corresponding protocol in another protocol stack in at least one other node, with which the protocol in the stack communicates. The highest layer protocol used within the system is often referred to as the application layer protocol. The lower layer protocols used within the data transmission system enable the application layer protocol in one node to communicate with the application layer protocol in other nodes.
For some transmission types, such as the transmission of speech, it is more important that data arrives on time than that the received data is an exact copy of what was originally transmitted. For other transmission types, such as the downloading of information from the Internet, it is important that the received data is identical to the data originally transmitted, and this criterion is given higher priority than that the data arrives at the receiver within a certain period of time. In many data communication systems, a possibility of re-transmitting data, which for some reason was not correctly received, is therefore included. Such functionality for re-transmission of data can be implemented at several protocols used within a protocol stack.